package com.itheima.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置类
 */

/**
 * 官解：
 * 当前配置类不是必须的，
 * 因为 Spring Boot 框架会自动装配 RedisTemplate 对象，
 * 但是默认的key序列化器为JdkSerializationRedisSerializer，
 * 导致我们存到Redis中后的数据和原始数据有差别
 */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    //@Bean表示该方法返回的对象交给SpringIOC容器进行管理，RedisConnectionFactory是从IOC从取得的---自动装配
    //若不指定序列化方式，默认的序列化方式为jdk序列化，默认的Key序列化器为：JdkSerializationRedisSerializer
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为：JdkSerializationRedisSerializer
        //避免存储到Redis数据库中的key变成携带类序列化信息的key，便于阅读。
        //若不进行指定序列化方式也行，但是要保证Key序列化器为同一个
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);



        return redisTemplate;
    }

}